﻿/*
 * Created by SharpDevelop.
 * User: CeCi
 * Date: 02/04/2014
 * Time: 03:15 p.m.
 * 
 * To change this template use Tools | Options | Coding | Edit Standard Headers.
 */
using System;
using System.Data;
using System.Collections.Generic;
using System.Runtime.Remoting.Messaging;

namespace Gestión_UTN.blimpl
{
    /// <summary>
    /// Description of carrerablimpl.
    /// </summary>
    public class carrerablimpl : Gestión_UTN.bl.carrerabl
    {
        private static Gestión_UTN.da.carrerada createCarrera = Gestión_UTN.factories.dafactory.createCarrera();
        private static Gestión_UTN.bl.materiabl createMateria = Gestión_UTN.factories.blfactory.createMateria();

        public carrerablimpl()
        {
        }

        public bool SaveCarrera(string nombre)
        {
            bool ingresada = true;

            try
            {
                ingresada = (!nombre.Equals("")) ?
                    createCarrera.SaveCarrera(nombre)
                    : false;
            }
            catch (exceptions.daexception ex)
            {
                ingresada = false;

                throw new exceptions.blexception(ex.Message);
            }

            return ingresada;
        }

        public bool DeleteCarrera(string nombre)
        {
            bool eliminada = false;

            try
            {
                eliminada = (!nombre.Equals(""))
                    ? createCarrera.DeleteCarrera(nombre)
                    : false;
            }
            catch (exceptions.daexception ex)
            {
                eliminada = false;

                throw new exceptions.blexception(ex.Message);
            }

            return eliminada;
        }

        public bool ModifyCarrera(string nombre_anterior, string nombre)
        {
            bool modificada = false;

            try
            {
                modificada = (!nombre.Equals("") && !nombre_anterior.Equals(""))
                    ? createCarrera.ModifyCarrera(nombre_anterior, nombre)
                    : false;
            }
            catch (exceptions.daexception ex)
            {
                modificada = false;

                throw new exceptions.blexception(ex.Message);
            }

            return modificada;
        }

        public System.Data.DataTable FindAllCarreras()
        {
            DataTable tablaCarreras = null;

            try
            {
                tablaCarreras = createCarrera.FindAllCarreras();
            }
            catch (exceptions.daexception ex)
            {
                tablaCarreras = null;

                throw new exceptions.blexception(ex.Message);
            }

            return tablaCarreras;
        }

        public Gestión_UTN.bo.Carrerabo FindCarreraByNombre(string nombre)
        {
            Gestión_UTN.bo.Carrerabo carrera = null;

            try
            {
                Gestión_UTN.Entities.Carrera car = createCarrera.FindCarreraByNombre(nombre);

                DataTable tm = (null != car)
                            ? createMateria.FindAllMaterias()
                            : null;

                DataRow[] mats = (null != tm && tm.Rows.Count > 0)
                    ? tm.Select("car_nombre = '" + car.Nombre + "' ") : null;

                List<String> materias = new List<string>();

                if (null != mats)
                {
                    foreach (DataRow dr in mats)
                    {
                        materias.Add(dr["mat_nombre"].ToString());
                    }

                }

                carrera = new Gestión_UTN.bo.Carrerabo(car.Car_id,
                                                           car.Nombre, materias);
            }
            catch (exceptions.daexception ex)
            {
                carrera = null;

                throw new exceptions.blexception(ex.Message);
            }

            return carrera;
        }

        public Gestión_UTN.bo.Carrerabo FindCarreraById(int id)
        {
            Gestión_UTN.bo.Carrerabo carrera = null;

            try
            {
                Gestión_UTN.Entities.Carrera car = createCarrera.FindCarreraById(id);

                DataTable tm = createMateria.FindAllMaterias();

                DataRow[] mats = (null != tm)
                    ? tm.Select("car_nombre = '" + car.Nombre + "'") : null;

                if (null != mats)
                {
                    List<String> materias = new List<string>();

                    foreach (DataRow dr in mats)
                    {
                        materias.Add(dr["mat_nombre"].ToString());
                    }

                    carrera = new Gestión_UTN.bo.Carrerabo(car.Car_id,
                                                           car.Nombre, materias);
                }
            }
            catch (exceptions.daexception ex)
            {
                carrera = null;

                throw new exceptions.blexception(ex.Message);
            }

            return carrera;
        }
    }
}
